package com.enjoyor.soa.traffic.api.service.dubbo.bigdata;

import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

import java.util.Date;

public interface DubboODTravelSurveyService {
    /**
     * 查询昨日的出行
     *
     * @param toDay 今天时间
     * @return　List<ODTravelFrequencyDto>
     */
    ResultPojo travelFrequencyYesterDay(String token, Date toDay);

    /**
     * 查询昨天的出行对比
     *
     * @param toDay 今天时间
     * @return ODFrequencyAndContrastDto
     */
    ResultPojo travelFrequencyCompareYesterDay(String token, Date toDay);

    /**
     * 最近七天的出行量
     *
     * @param toDay
     * @return List<ODTravelFrequencyDto> pass_day(日期)， DEPART_FREQ(每日出行次数)
     */
    ResultPojo travelFrequencyLastSevenDay(String token, Date toDay);

    /**
     * 最近七天的同比
     *
     * @param toDay
     * @return ODFrequencyAndContrastDto frequency(日均出行次数), contrast(同比涨幅)
     */
    ResultPojo travelFrequencyCompareLastSevenDay(String token, Date toDay);

    /**
     * 最近30天的出行量
     *
     * @param toDay
     * @return List<ODTravelFrequencyDto> pass_day(日期)， DEPART_FREQ(每日出行次数)
     */
    ResultPojo travelFrequencyLast30Day(String token, Date toDay);

    /**
     * 最近30天的同比
     *
     * @param toDay
     * @return ODFrequencyAndContrastDto frequency(日均出行次数), contrast(同比涨幅)
     */
    ResultPojo travelFrequencyCompareLast30Day(String token, Date toDay);

    /**
     * 昨日出行时长分布
     *
     * @param toDay
     * @return List<ODDurationDistributionDto> durationInterval(时长区间), intervalTimes(区间对应的出行次数)
     */
    ResultPojo travelTimeDistributionLastDay(String token, Date toDay);

    /**
     * 上个七天出行时长分布
     *
     * @param toDay
     * @return List<ODDurationDistributionDto> durationInterval(时长区间), intervalTimes(区间对应的出行次数)
     */
    ResultPojo travelTimeDistributionLast7Day(String token, Date toDay);

    /**
     * 上个30天出行时长分布
     *
     * @param toDay
     * @return List<ODDurationDistributionDto> durationInterval(时长区间), intervalTimes(区间对应的出行次数)
     */
    ResultPojo travelTimeDistributionLast30Day(String token, Date toDay);

    /**
     * 平均单次出行时长
     *
     * @param toDay
     * @param days  往前推的天数 可选值有(1, 7, 30)
     * @return Float
     */
    ResultPojo avgTimeSingleTravel(String token, Date toDay, int days);

    /**
     * 昨天热门路线top10
     *
     * @param toDay
     * @return List<ODHotPathDto>
     */
    ResultPojo hotPathTop10LastDay(String token, Date toDay);

    /**
     * 上个七天热门路线top10
     *
     * @param toDay
     * @return List<ODHotPathDto>
     */
    ResultPojo hotPathTop10Last7Day(String token, Date toDay);

    /**
     * 上个30天热门路线top10
     *
     * @param toDay
     * @return List<ODHotPathDto>
     */
    ResultPojo hotPathTop10Last30Day(String token, Date toDay);

    /**
     * 线路展示接口
     *
     * @param pathId
     * @return List<PointsDto>
     */
    ResultPojo pathDisplay(String token, String pathId);

    /**
     * 线路行驶次数接口
     *
     * @param pathId 线路id
     * @param toDay
     * @param days   过去的天数，可选参数(1, 7, 30)
     * @return List<ODLineDriverDistDto>
     */
    ResultPojo lineDrivingDetails(String token, String pathId, Date toDay, int days);

    /**
     * 昨日热门出发点位
     *
     * @param toDay
     * @return List<ODHotPointDto>
     */
    ResultPojo departHotPointTop10LastDay(String token, Date toDay);

    /**
     * 前七天热门出发点位
     *
     * @param toDay
     * @return List<ODHotPointDto>
     */
    ResultPojo departHotPointTop10Last7Day(String token, Date toDay);

    /**
     * 前30天热门出发点位
     *
     * @param toDay
     * @return List<ODHotPointDto>
     */
    ResultPojo departHotPointTop10Last30Day(String token, Date toDay);

    /**
     * 热门到达点位
     *
     * @param token
     * @param startDay 开始日期
     * @param endDay   结束日期
     * @return List<ODHotPointDto>
     */
    ResultPojo arriveHotPointTop10(String token, Date startDay, Date endDay);

    /**
     * 昨日热门到达点位
     *
     * @param toDay
     * @return List<ODHotPointDto>
     */
    ResultPojo arriveHotPointTop10LastDay(String token, Date toDay);

    /**
     * 前七天热门到达点位
     *
     * @param toDay
     * @return List<ODHotPointDto>
     */
    ResultPojo arriveHotPointTop10Last7Day(String token, Date toDay);

    /**
     * 前30天热门到达点位
     *
     * @param toDay
     * @return List<ODHotPointDto>
     */
    ResultPojo arriveHotPointTop10Last30Day(String token, Date toDay);

    /**
     * 线路行驶概况
     *
     * @param startDay 分析的开始时间
     * @param endDay   分析的结束时间
     * @param bPointId 路线的开始点位名
     * @param ePointId 路线的结束点位名
     * @return ODPathTrafficDetailsDto
     */
    ResultPojo lineDrivingSurvey(String token, Date startDay, Date endDay, String bPointId, String ePointId);

    /**
     * 线路趋势分析   时间粒度小时
     *
     * @param startDay
     * @param endDay
     * @param bPointId
     * @param ePointId
     * @return List<ODPathTrafficDetailsDto>
     */
    ResultPojo lineTendAnalysisByHour(String token, Date startDay, Date endDay, String bPointId, String ePointId);

    /**
     * 线路趋势分析   时间粒度天
     *
     * @param startDay
     * @param endDay
     * @param bPointId
     * @param ePointId
     * @return List<ODPathTrafficDetailsDto>
     */
    ResultPojo lineTendAnalysisByDay(String token, Date startDay, Date endDay, String bPointId, String ePointId);

    /**
     * 线路趋势分析   时间粒度月
     *
     * @param startDay
     * @param endDay
     * @param bPointId
     * @param ePointId
     * @return List<ODPathTrafficDetailsDto>
     */
    ResultPojo lineTendAnalysisByMonth(String token, Date startDay, Date endDay, String bPointId, String ePointId);

}
